package com.example.tool.util.net;

/**
 * @author 小帅丶
 * @className GradientSample
 * @Description 人像渐变（邀测）
 * @Date 2020/4/27
 **/
public class GradientSample {
    /**
     * 重要提示代码中所需工具类
     * FileUtil,Base64Util
     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
     * 下载
     * lombok 需要jar和开发工具安装插件
     * hutool 直接引入jar即可
     * JDK    最好1.8以上
     */
//    public static void main(String[] args) throws Exception {
//        String token = "【access_token】";
//        String url = "https://aip.baidubce.com/rest/2.0/face/v1/gradient";
//
//        //图片转BASE64
//        String base641 = Base64Util.encode(FileUtil.readFileByBytes("【本地图片地址1】"));
//        String base642 = Base64Util.encode(FileUtil.readFileByBytes("【本地图片地址2】"));
//        String base643 = Base64Util.encode(FileUtil.readFileByBytes("【本地图片地址3】"));
//        String base644 = Base64Util.encode(FileUtil.readFileByBytes("【本地图片地址4】"));
//
//        GradientBean bean = new GradientBean();
//        //app标识
//        bean.setAppid("【appid】");
//        //音乐 ID 我想输出文件类型为GIF应该是没啥用的吧
//        bean.setMusic_id(1);
//        //视频帧率 默认 10
//        bean.setFps(20);
//        //输出文件类型 可选GIF,MOV,MP4
//        bean.setOutput_type("MP4");
//
//        bean.setOutput_width(800);
//        bean.setOutput_height(1280);
//
//
//        //只支持4张图片 5张就报错 不知道是不是接口的限制
//        List<GradientBean.ImageListBean> image_list = new ArrayList<>();
//        GradientBean.ImageListBean imgA = new GradientBean.ImageListBean();
//        imgA.setImage(base641);
//        GradientBean.ImageListBean imgB = new GradientBean.ImageListBean();
//        imgB.setImage(base642);
//        GradientBean.ImageListBean imgC = new GradientBean.ImageListBean();
//        imgC.setImage(base643);
//        GradientBean.ImageListBean imgD = new GradientBean.ImageListBean();
//        imgD.setImage(base644);
//
//
//        image_list.add(imgA);
//        image_list.add(imgB);
//        image_list.add(imgC);
//        image_list.add(imgD);
//
//        bean.setImage_list(image_list);
//
//        //每张图片的展示时长, 以空格分隔 数量要求和请求的图片张数一致 GIF默认每张图片0.7s 视频默认每张图片2s
//        //这个参数必须给 且和 图片个数一致  用空格 隔开
//        bean.setTempo("2 2 2 2");
//
//        String param = JSON.toJSONString(bean);
//        System.out.println(bean.getTempo());
//        System.out.println(param);
//        System.out.println(url + "?access_token=" + token);
//        long startTime = System.currentTimeMillis();
//        System.out.println("开始时间 = " + startTime);
//        String result = HttpUtil.post(url + "?access_token=" + token, param);
//        long endTime = System.currentTimeMillis();
//        System.out.println("结束时间 = " + endTime);
//        System.out.println("耗时 = " + (endTime - startTime));
//        GradientResponseBean responseBean = JSON.parseObject(result, GradientResponseBean.class);
//        System.out.println("结果 = " +responseBean.toString());
//        //直接拿base64保存为文件
//        GenerateBase64ToFile(responseBean.getResult().getOutput(),bean.getOutput_type());
//        //把base64存到文本 不是必须操作
//        cn.hutool.core.io.FileUtil.writeString(responseBean.getResult().getOutput(), "F://testimg//gradient.txt", "UTF-8");
//
//    }
//
//    @NoArgsConstructor
//    @Data
//    public static class GradientBean{
//        private String appid;
//        private int music_id;
//        private int fps = 10;
//        private String output_type;
//        private int output_width = 800;
//        private int output_height = 1280;
//        private String tempo;
//        private int morph_time = 1;
//        private List<ImageListBean> image_list;
//        @NoArgsConstructor
//        @Data
//        public static class ImageListBean {
//            private String image;
//        }
//    }
//
//    @NoArgsConstructor
//    @Data
//    public static class GradientResponseBean{
//        private int error_code;
//        private String error_msg;
//        private long log_id;
//        private int timestamp;
//        private int cached;
//        private ResultBean result;
//
//        @Override
//        public String toString() {
//            return "GradientResponseBean{" +
//                    "error_code=" + error_code +
//                    ", error_msg='" + error_msg + '\'' +
//                    ", log_id=" + log_id +
//                    ", timestamp=" + timestamp +
//                    ", cached=" + cached +
//                    '}';
//        }
//    }
//
//    @NoArgsConstructor
//    @Data
//    public static class ResultBean {
//
//        private String output;
//    }
//
//    /**
//     * @Author 小帅丶
//     * @Description base64保存为文件
//     * @Date  2020/4/27
//     * @param imgStr 文件的base64字符串
//     * @param prefix 保存的后缀
//     * @return boolean
//     **/
//    public static boolean GenerateBase64ToFile(String imgStr,String prefix) {   //对字节数组字符串进行Base64解码并生成图片
//        BASE64Decoder decoder = new BASE64Decoder();
//        try {
//            if(imgStr == null) {
//                //图像数据为空
//                return false;
//            }else{
//                //Base64解码
//                byte[] b = decoder.decodeBuffer(imgStr);
//                for (int i = 0; i < b.length; ++i) {
//                    ////调整异常数据
//                    if (b[i] < 0) {
//                        b[i] += 256;
//                    }
//                }
//                //生成jpeg图片 新生成的图片
//                String imgFilePath = "F://testimg//"+System.currentTimeMillis()+"."+prefix.toLowerCase();
//                OutputStream out = new FileOutputStream(imgFilePath);
//                out.write(b);
//                out.flush();
//                out.close();
//                return true;
//            }
//        } catch (Exception e) {
//            return false;
//        }
//    }
}
